home *** CD-ROM | disk | FTP | other *** search
/ FishMarket 1.0 / FishMarket v1.0.iso / fishies / 201-225 / disk_203 / isam / isam.h < prev    next >
C/C++ Source or Header  |  1992-05-06  |  6KB  |  175 lines

  1. /***************************************
  2. *         ISAM File System
  3. ****************************************
  4. *    Copyright © 1989 by Kai Ploog
  5. *          A.d. Huehnerhecke 1
  6. *          D-6074 Roedermark
  7. *
  8. ****************************************
  9. *  Header: ISAM.h  (set TAB to 4)
  10. *  V0.9 beta rev 02   2/13/1989
  11. *  first version:     1/15/1989
  12. ***************************************/
  13.  
  14. /* include your system's type definition header before ISAM.h !!! */
  15.  
  16.  
  17. /*********************
  18. *    defines
  19. *********************/
  20.  
  21. /*** field types ***/
  22. #define ISAM_KEY (0x0001)        /* key field */
  23. #define ISAM_TEXT (0x0002)        /* text field */
  24. #define ISAM_NUMERIC (0x0004)    /* numeric field (float) */
  25. #define ISAM_DATE (0x0008)        /* date field */
  26. #define ISAM_TIME (0x0010)        /* time field */
  27.  
  28. /*** ISAM types (hi-byte internal, lo-byte external) ***/
  29. #define ISAM_SINGLEFILE (0x0001)    /* single file sytem (no data base) */
  30. #define ISAM_PREDEFINED (0x0002)    /* predefined ISAMData structure */
  31. #define ISAM_DATABASE (0x0004)        /* data base system */
  32.  
  33. /*** ISAM Key flags (hi-byte external, lo-byte internal) ***/
  34. #define ISAM_MODIFIED (0x0001)        /* flag if keys have been modified */
  35. #define ISAM_AUTOUPDATE (0x0100)    /* automatic update when modified */
  36. #define ISAM_DUPLICATEKEYS (0x0200)    /* allows duplicate keys */
  37.  
  38. /*** ISAMOpen and function modes ***/
  39. #define ISAM_REPLACE (0x01L)        /* replace file/data set */
  40. #define ISAM_NEWFILE (0x02L)        /* create new ISAM file */
  41. #define ISAM_OLDFILE (0x04L)        /* open old ISAM file */
  42.  
  43. /*** Error numbers in Hd->Error ***/
  44. #define ISAMe_CANT_OPEN_INDEX    (1)
  45. #define ISAMe_CANT_WRITE_INDEX    (2)
  46. #define ISAMe_CANT_READ_INDEX    (3)
  47. #define ISAMe_CANT_SEEK_INDEX    (4)
  48. #define ISAMe_CANT_CLOSE_INDEX    (5)
  49.  
  50. #define ISAMe_CANT_OPEN_DATA    (6)
  51. #define ISAMe_CANT_WRITE_DATA    (7)
  52. #define ISAMe_CANT_READ_DATA    (8)
  53. #define ISAMe_CANT_SEEK_DATA    (9)
  54. #define ISAMe_CANT_CLOSE_DATA    (10)
  55.  
  56. #define ISAMe_CANT_OPEN_DEF        (11)
  57. #define ISAMe_CANT_WRITE_DEF    (12)
  58. #define ISAMe_CANT_READ_DEF        (13)
  59. #define ISAMe_CANT_SEEK_DEF        (14)
  60. #define ISAMe_CANT_CLOSE_DEF    (15)
  61.  
  62. #define ISAMe_KEYS_NOT_EQUAL    (16)
  63. #define ISAMe_KEY_EXISTS        (17)
  64. #define ISAMe_MAXKEYS_REACHED    (18)
  65. #define ISAMe_KEY_TOO_LONG        (19)
  66.  
  67. #define ISAMe_NOT_ENOUGH_MEM    (20)
  68.  
  69.  
  70. /*************************
  71. *   function prototypes
  72. *************************/
  73.  
  74. struct ISAMHeader *ISAMOpen(struct ISAMNewFile *, USHORT);
  75. int ISAMClose(struct ISAMHeader *);
  76. int ISAMUpdate(struct ISAMHeader *);
  77. int ISAMSearch (struct ISAMHeader *, STRPTR, int);
  78. int ISAMAdd (struct ISAMHeader *, APTR);
  79. int ISAMReplace (struct ISAMHeader *, APTR);
  80. int ISAMDelete (struct ISAMHeader *);
  81. int ISAMRead (struct ISAMHeader *, APTR);
  82. int ISAMFirst (struct ISAMHeader *);
  83. int ISAMLast (struct ISAMHeader *);
  84. int ISAMNext (struct ISAMHeader *);
  85. int ISAMPrev (struct ISAMHeader *);
  86. int ISAMError (struct ISAMHeader *);
  87.  
  88.  
  89. /*********************
  90. *    structures
  91. *********************/
  92.  
  93. #define NAMLEN (32)
  94. #define FORMLEN (18)
  95.  
  96. struct ISAMField {
  97.     USHORT Size;            /* the overall field size: sign+dec+point+frac */
  98.     USHORT Type;            /* field type */
  99.     char Name[NAMLEN];        /* field name */
  100.     char Format[FORMLEN];    /* format of field contents */
  101.     UBYTE reserved[10];        /* reserved for future INTERNAL! use */
  102.     /* user defined data: */
  103.  
  104.     /* insert user data above and update the number of reserved bytes: */
  105.     UBYTE user[14];            /* user reserved bytes */
  106. };
  107.  
  108. #undef NAMLEN
  109. #undef FORMLEN
  110.  
  111.  
  112. struct ISAMDataHeader {
  113.     USHORT Fields;                /* number of fields in structure */
  114.                     /* structure items MUST keep this
  115.                      * position and length (SHORT) !!!
  116.                      */
  117.     USHORT KeyPos;                /* position of key field */
  118.     USHORT RecLength;            /* length of whole record */
  119.     struct ISAMField Field[1];    /* field definition structures */
  120.     UBYTE reserved[10];            /* reserved for future INTERNAL! use */
  121.     /* user defined data: */
  122.  
  123.     /* insert user data above and update the number of reserved bytes: */
  124.     UBYTE user[20];                /* user reserved bytes */
  125. };
  126.  
  127. struct ISAMKey {
  128.     struct ISAMKey *NextKey;    /* next ISAMKey structure in list */
  129.     struct ISAMKey *PrevKey;    /* previous ISAMKey structure in list */
  130.     ULONG Position;                /* position of this key in data file */
  131.     char Key[1];                /* key string */
  132. };
  133.  
  134. struct ISAMKeyHeader {
  135.     struct ISAMKey *FirstKey;    /* pointer to first ISAMKey structure */
  136.     struct ISAMKey *LastKey;    /* pointer to last ISAMKey structure */
  137.     USHORT KeyLength;            /* length of key field */
  138.     ULONG Keys;                    /* current number of keys in list */
  139.     ULONG MaxKeys;                /* maximum number of keys allowed */
  140.     ULONG Records;                /* number of filled-in records */
  141.     USHORT Flags;                /* internal flags */
  142.     struct ISAMKey *Current;    /* address of current key in key list */
  143. };
  144.  
  145. struct ISAMFiles {
  146.     STRPTR IndexName;    /* pointer to file name for index (keys) */
  147.     int IndexFh;        /* index file handle */
  148.     STRPTR DataName;    /* pointer to file name for data */
  149.     int DataFh;            /* data file handle */
  150.     STRPTR DefName;        /* pointer to file name for data definitions */
  151.     int DefFh;            /* defititions file handle */
  152. };
  153.  
  154. struct ISAMHeader {
  155.     struct ISAMHeader *NextHeader;    /* pointer to next ISAMHeader structure */
  156.     APTR DBase;                        /* pointer to DataBase structure */
  157.     USHORT Type;                    /* ISAM types */
  158.     struct ISAMFiles *Files;        /* pointer to ISAMFiles structure */
  159.     struct ISAMKeyHeader *Keys;        /* pointer to ISAMKeyHeader structure */
  160.     struct ISAMDataHeader *Data;    /* pointer to ISAMDataHeader structure */
  161.     int Error;                        /* last error number */
  162. };
  163.  
  164. struct ISAMNewFile {
  165.     STRPTR IndexName;                /* pointer to index file name */
  166.     STRPTR DataName;                /* pointer to data file name */
  167.     STRPTR DefName;                    /* pointer to definitions file name */
  168.     USHORT Type;                    /* type of ISAM file */
  169.     APTR DBase;                        /* pointer to DataBase structure */
  170.     struct ISAMDataHeader *Data;    /* pointer to initialized data definition structure */
  171.     ULONG MaxKeys;                    /* maximum possible keys */
  172. };
  173.  
  174.  
  175.